﻿namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工艺路线。
/// </summary>
/// <remarks>
/// 说明：
/// <para>1、工序的后置工序只能有一个，若有多个，表示是并行执行；</para>
/// <para>2、路线的终结点有且只有一个；</para>
/// <para>3、每条工艺路线中工序以及流向是固定的，不与产品关联。</para>
/// </remarks>
[SugarTable("proc_route")]
public sealed class ProcRoute : AuditedEntity, ISoftDelete
{
    /// <summary>
    /// 产线 Id
    /// </summary>
    public long LineId { get; set; }

    /// <summary>
    /// 产线代码
    /// </summary>
    [NotNull]
    public string? LineCode { get; set; }

    /// <summary>
    /// 工艺路线编号
    /// </summary>
    [NotNull]
    public string? RouteCode { get; set; }

    /// <summary>
    /// 工艺路线名称。
    /// </summary>
    [NotNull]
    public string? RouteName { get; set; }

    /// <summary>
    /// 备注
    /// </summary>
    public string? Remark { get; set; }

    /// <summary>
    /// 启用状态（0->停用，1->启用）
    /// </summary>
    public EnabledStatusEnum Status { get; set; }

    public bool IsDeleted { get; set; }

    /// <summary>
    /// 工艺路线图。
    /// </summary>
    [Navigate(NavigateType.OneToOne, nameof(ProcRouteGraph.RouteId))]
    public ProcRouteGraph? GraphData { get; set; }

    /// <summary>
    /// 产品制程。
    /// </summary>
    [Navigate(NavigateType.OneToMany, nameof(ProcRouteProduct.RouteId))]
    public List<ProcRouteProduct>? Products { get; set; } = [];
}
